7.2 在 Deis 上 Hacking

我们尝试使得在 Deis 上 hack 更简单。尽管如此,这里有一些必要的变化因素和一些必要的设置。我们欢迎任何可以自动化或者是简化该过程的建议。

如果你是刚进入 Deis 代码基线,使用 easy-fix 标签寻找 GitHub issues。这有很多直接或者是低风险的 issues,这是一种变得对 Deis 更熟悉的方式。

先决条件

你可以在任何支持平台开发,包括你的笔记本,云厂商或者是在裸机上。我们强烈建议最小的 3 节点集群。

开发工作流要求一个 Docker Registry,它对你和你集群的所有主机来说是可访问的。

你也将需要一个 deisctl 客户端来更新镜像以及存储组件。

Fork the Repository

为了得到 Deis 来开发,首先 fork the Deis repository,然后 clone 你 fork 的这个 repository:

  1. $ git clone git@github.com:<username>/deis.git
  2. $ cd deis
  3. $ export DEIS_DIR=`pwd` # to use in future commands

安装客户端

在一个开发环境,你将想使用最新版本的客户端。通过使用 Makefile 和符号链接 client/deis.py 到你本地工作环境的 deis 来安装它的依赖。

  1. $ cd $DEIS_DIR/client
  2. $ make install
  3. $ sudo ln -fs $DEIS_DIR/client/deis.py /usr/local/bin/deis
  4. $ deis
  5. Usage: deis <command> [<args>...]

配置 SSH 隧道

为了使用 deisctl 连接集群,你必须添加私钥到 ssh-agent。例如,当使用 Vagrant:

  1. $ ssh-add ~/.vagrant.d/insecure_private_key

设置 DEISCTL_TUNNEL ,因此你工作环境中的 deisctl 客户端可以连接到你集群中的其中一台主机:

  1. $ export DEISCTL_TUNNEL=172.17.8.100

使用 deisctl list 测试连通性:

  1. $ deisctl list

配置一个 Docker Registry

开发工作流要求 Docker Registry 设置在 DEV_REGISTRY 环境变量中。如果你在本地开发,你可以使用 dev-registry 目标快速启动,一次性的注册进一个 Docker 容器中。

  1. $ make dev-registry
  2. To configure the registry for local Deis development:
  3. export DEV_REGISTRY=192.168.59.103:5000

小提示 对于 Docker 1.3.1 和更新版, docker push 到这个开发 registry,没有 SSL certificate 支持或许会失败。使用一个 --insecure-registry 标识重启 Docker。
对于 boot2docker 1.3.1,例如,添加 EXTRA_ARGS="--insecure-registry 192.168.59.103:5000"/var/lib/boot2docker/profile 并使用 sudo /etc/init.d/docker restart 重启 Docker。

如果你在其他地方开发,你必须设置一个你自己的 registry。确保它满足以下要求:

  1. 你可以从你的工作环境 push Docker images 。
  2. 集群中的主机可以使用相同的 URL 来 pull images

小提示 如果开发 registry 是不安全的以及有一个除了 10.0.0.0/8, 172.16.0.0/12, 或 192.168.0.0/16 之外的 IP 地址范围,你将不得不修改 contrib/coreos/user-data.example 并把你的开发 registry 加入白名单列表,因此 daemons 能 pull 你的基础组件。

开发工作流

Deis 包含 Makefile 设计来简化开发工作流。该工作流通常是:

  1. 更新源代码和使用 git 提交你的变更
  2. 使用 make -C <component> build 构建一个新的 Docker 镜像
  3. 使用 make -C <component> dev-release 来 push 一个发行快照
  4. 使用 make -C <component> restart 重启组件

这个可以通过使用 deploy 缩短到一行:

  1. $ make -C controller deploy

你也可以使用相同的任务在 root Makefile 上操作所有组件。比如,make deploy 将构建,dev-release,和重启集群上的所有组件。

重要 为了裁剪一个 dev-release,当给 Docker 镜像加标签时, 你必须使用 git 提交变更来增加 SHA 使用。

测试你的变更

Deis 使用一套综合的自动化测试来交付,大部分使用 Go 编写。看正在运行测试的测试 Deis 操作指南。

有用的命令

一旦你的 controller 正在运行,这里有一些有帮助的命令。

Tail Logs

  1. $ deisctl journal controller

从源码重新构建服务

  1. $ make -C controller build push restart

重启服务

  1. $ make -C controller restart

Django Shell

  1. $ deisctl ssh controller # SSH into the controller
  2. $ nse deis-controller # inject yourself into the container
  3. $ cd /app # change into the django project root
  4. $ ./manage.py shell # get a django shell

其他一些 Deis 开发者或许会发现有用的命令?请给我们发 PR。

Pull Requests

请读 PR 清单。当提一个变更给 Deis 时,它包含一份你应该做的事情的清单。